// Function.prototype.myCall = function (context, ...args) {
//   if (typeof this !== "function") {
//     throw new TypeError("Not a function");
//   }

//   // 创建一个唯一的属性来存储函数引用，避免覆盖已有的同名属性
//   context = context || window; // 如果没有提供上下文，则默认为全局对象
//   const uniqueProp = Symbol();
//   context[uniqueProp] = this;
//   console.log(this);   //this指向调用myCall的函数greet
//   console.log(context);  //context指向obj

//   // 调用函数，并传递参数
//   const result = context[uniqueProp](...args); // 调用函数从而改变this指向

//   // 删除临时属性
//   delete context[uniqueProp];

//   return result;
// };

// // 示例用法
// const obj = { name: "Tom" };
// function greet(greeting) {
//   console.log(`${greeting}, ${this.name}`);
// }
// greet.myCall(obj, "Hello"); // 输出: Hello, Tom

// Function.prototype.myCall = function (obj, ...args) {
//   if (typeof this !== "function") {
//     throw new TypeError("Not a function");
//   }

//   const kkx = obj || window; // 如果没有提供上下文，则默认为全局对象

//   const uniqueProp = Symbol();
//   kkx[uniqueProp] = this;

//   const result = kkx[uniqueProp](...args);

//   delete kkx[uniqueProp];

//   return result;
// };
// const obj = { name: "Tom" };
// function greet(greeting) {
//   console.log(`${greeting}, ${this.name}`);
// }
// greet.myCall(obj, "Hello"); // 输出: Hello, Tom

Function.prototype.myBind = function (obj, ...args) {
  //   if (typeof this !== "function") {
  //     throw new TypeError("Not a function");
  //   }
  //   obj = obj || window;
  //   const uniqueProp = Symbol();
  //   obj[uniqueProp] = this;
  //   return function () {
  //     obj[uniqueProp](...args);
  //   };
  obj["a"] = this;
  return function () {
    obj["a"](...args);
  };
};
const obj = { name: "Tom" };
function greet(greeting, punctuation) {
  console.log(`${greeting}, ${this.name} ${punctuation}`);
}
// greet.myBind(obj, "Hello"); // 输出: Hello, Tom
greet.myBind(obj, "Hello", "!")(); // 输出: Hello, Tom!
